package com.xhai.domain.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 在线用户表
 * </p>
 *
 * @author xhai
 * @since 2025-05-24
 */
@Getter
@Setter
@ToString
@TableName("sys_online_user")
@Schema(name = "SysOnlineUser", description = "在线用户表")
public class SysOnlineUser implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 在线用户ID
     */
    @Schema(description = "在线用户ID")
    @TableId(value = "ONLINE_USER_ID", type = IdType.ASSIGN_ID)
    private Long onlineUserId;

    /**
     * 会话ID
     */
    @TableField("SESSION_ID")
    @Schema(description = "会话ID")
    private String sessionId;

    /**
     * 会话创建时间
     */
    @Schema(description = "会话创建时间")
    @TableField("SESSION_CREATE_TIME")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime sessionCreateTime;

    /**
     * 会话最后一次访问时间
     */
    @Schema(description = "会话最后一次访问时间")
    @TableField("SESSION_LAST_ACCESS_TIME")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime sessionLastAccessTime;

    /**
     * 超时时间（分）
     */
    @Schema(description = "超时时间（分）")
    @TableField("SESSION_EXPIRE_TIME")
    private Integer sessionExpireTime;

    /**
     * 用户账号
     */
    @TableField("USERNAME")
    @Schema(description = "用户账号")
    private String username;

    /**
     * 部门名称
     */
    @TableField("DEPT_NAME")
    @Schema(description = "部门名称")
    private String deptName;

    /**
     * 在线IP
     */
    @TableField("IP")
    @Schema(description = "在线IP")
    private String ip;

    /**
     * 在线地点
     */
    @TableField("LOCATION")
    @Schema(description = "在线地点")
    private String location;

    /**
     * 浏览器类型
     */
    @TableField("BROWSER")
    @Schema(description = "浏览器类型")
    private String browser;

    /**
     * 操作系统
     */
    @TableField("OS")
    @Schema(description = "操作系统")
    private String os;
}
